package chaoyue.study.jdbc;

import chaoyue.study.jdbc.utils.DbUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;

/**
 * 事务可以通过Connection对象中的commit方法和rollback方法进行控制
 * 默认事务时自动提交的，需要通过设置Connection对象的autoCommit为false来关闭
 * 事务只能在一个Connection对象中，Connection关闭会自动提交事务（使用ThreadLocal来隐式传递Connection对象）
 */
public class Test4_Transaction {
    public static void main(String[] args) throws Exception {
        Connection connection = DbUtils.getConnection();
        connection.setAutoCommit(false);  // 关闭自动提交

        PreparedStatement statement = connection.prepareStatement("update test_user set password = ? where id = ?");
        statement.setString(1, "******");
        statement.setInt(2, 1);
        int count = statement.executeUpdate();

        connection.commit();      // 提交事务
        System.out.println(count);// 影响行数为1 实际查询确实更新成功

        statement.setInt(2, 2);
        count = statement.executeUpdate();
        connection.rollback();    // 回滚事务
        System.out.println(count);// 影响行数为1 实际查询并没有更新，因为事务被回滚了
    }
}
